home *** CD-ROM | disk | FTP | other *** search
/ Meeting Pearls 1 / Meeting Pearls Vol 1 (1994).iso / amok98-106 / amok98 / programminginoberon / model2.mod < prev    next >
Text File  |  1993-10-07  |  2KB  |  62 lines

  1. MODULE Model;
  2. (* A single server queue model, page 260 *)
  3. IMPORT Sim, Stations, Paths, Sequences, RandomNumbers, In, Out;
  4. TYPE 
  5.     Customer = POINTER TO CustomerDesc;
  6.     CustomerDesc = RECORD (Sim.ActorDesc)
  7.         ts: REAL    (* Time stamp of arrival epoch *)
  8.     END;
  9.  
  10. VAR  (* Global state variables *)
  11.     lambda, mu: REAL;
  12.     s: Stations.Station;  
  13.     srce: Sim.Actor;
  14.     w: Sequences.Sequence;
  15.  
  16. PROCEDURE HandleCust(cust: Sim.Actor; VAR msg: Sim.Message);
  17. BEGIN
  18.     WITH cust: Customer DO 
  19.         IF msg IS Stations.BeginMsg THEN 
  20.             Sim.Schedule(cust, Sim.time + RandomNumbers.Exp(mu))
  21.         ELSIF msg IS Sim.CalendarMsg THEN
  22.             Stations.Free(s);  Sequences.Add(w, Sim.time - cust.ts)
  23.         END
  24.     END
  25. END HandleCust;
  26.  
  27. PROCEDURE HandleSrce(srce: Sim.Actor; VAR msg: Sim.Message);
  28. VAR c: Customer;
  29. BEGIN
  30.     NEW(c);  c.handle := HandleCust;  c.ts := Sim.time;
  31.     Stations.Request(s, c);
  32.     Sim.Schedule(srce, Sim.time + RandomNumbers.Exp(lambda))
  33. END HandleSrce;
  34.  
  35. PROCEDURE Setup*;
  36. VAR  c: Customer;  
  37. BEGIN
  38.     In.Open;  Sim.Reset;  Sequences.Open(w);  Out.Open;
  39.     NEW(srce); srce.handle := HandleSrce;
  40.     In.Real(lambda);  Out.String("lambda =");  Out.Real(lambda, 10);
  41.     Sim.Schedule(srce, 0);
  42.     NEW(s);  Stations.Open(s);  
  43.     In.Real(mu);  Out.String("     mu =");  Out.Real(mu, 10);  Out.Ln
  44. END Setup;
  45.  
  46. PROCEDURE Run*;
  47. VAR dt: REAL;  q: REAL;
  48. BEGIN
  49.     In.Open; In.Real(dt);  
  50.     Sim.Simulate(dt);
  51.     Out.String("Sim.time =");  Out.Real(Sim.time, 10);
  52.     Out.String("     E[W]=");  Out.Real(Sequences.Mean(w), 10);
  53.     Out.String("     var[W]=");  Out.Real(Sequences.Var(w), 10);  
  54.     Out.Ln
  55. END Run;
  56.  
  57. END Model.    (* Copyright M. Reiser, 1992 *)
  58.  
  59.  
  60.  
  61.  
  62.